package com.hsu.usercenter.config;

//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Profile;
//import springfox.documentation.builders.ApiInfoBuilder;
//import springfox.documentation.builders.PathSelectors;
//import springfox.documentation.builders.RequestHandlerSelectors;
//import springfox.documentation.service.ApiInfo;
//import springfox.documentation.service.Contact;
//import springfox.documentation.spi.DocumentationType;
//import springfox.documentation.spring.web.plugins.Docket;
//import springfox.documentation.swagger2.annotations.EnableSwagger2;

///**
// * 自定义 Swagger 接口文档的配置
// * @ClassName: SwaggerConfig
// * @Author: Hsu琛君珩
// * @Date: 2024-05-09
// * @Version: v1.0
// * @Description: 通过此配置类自定义 Swagger 的 API 文档生成规则
// */
//@Configuration // 标记为配置类
//@EnableSwagger2 // 启用 Swagger 2 自动配置
//public class SwaggerConfig {
//    /**
//     * 配置 Docket Bean 实例，用于自定义 Swagger 接口文档
//     * @return 配置完成的 Docket 实例
//     */
//    @Bean
//    public Docket docket() {
//        // 创建并返回一个 Docket Bean 实例
//        return new Docket(DocumentationType.SWAGGER_2)
//                // 设置扫描的接口信息
//                .select()
//                // 配置接口扫描的方式
//                .apis(RequestHandlerSelectors
//                                // .any() // 扫描所有接口
//                                // .none() // 不扫描任何接口
//                                .basePackage("com.hsu.usercenter.controller") // 仅扫描指定包下的接口
//                        // .withClassAnnotation(RestController.class) // 扫描带有特定注解的类
//                        // .withMethodAnnotation(PostMapping.class) // 扫描带有特定注解的方法
//                )
//                // 配置路径的扫描方式
//                .paths(PathSelectors
//                                .any() // 匹配所有路径
//                        // .none() // 不匹配任何路径
//                        // .ant("/user/**") // 匹配符合特定字符串表达式的路径
//                        // .regex("") // 匹配符合正则表达式的路径
//                )
//                .build();
//    }
//
//    /**
//     * 设置 API 文档的基本信息，包括标题、描述、作者等
//     * @return 配置完成的 ApiInfo 对象
//     */
//    private ApiInfo apiInfo() {
//        // 设置作者信息
//        Contact contact = new Contact(
//                "HsuRosy", // 作者姓名
//                "user.hsurosy.icu", // 作者网址
//                "HsuRosy@qq.com"); // 作者邮箱
//
//        // 使用 ApiInfoBuilder 设置 API 文档的基本信息
//        return new ApiInfoBuilder()
//                .title("用户中心项目-接口文档") // API 文档标题
//                .description("去更远的地方，见更亮的光") // 描述信息
//                .termsOfServiceUrl("https://gitee.com/") // 服务条款的链接
//                .version("1.0") // 版本号
//                .license("Swagger-的使用(详细教程)") // 许可证名称
//                .licenseUrl("https://blog.csdn.net/Hsusan?type=blog") // 许可证链接
//                .contact(contact) // 作者信息
//                .build();
//    }
//}

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

/**
 * 自定义 Swagger 接口文档的配置，仅在开发和测试环境启用
 *
 * @ClassName: SwaggerConfig
 * @Author: HsuRosy
 * @Date: 2024-05-09
 * @Version: v1.0
 * @Description: 通过此配置类自定义 Swagger 的 API 文档生成规则
 */
@Configuration // 标记为配置类
@EnableSwagger2WebMvc // 启用 Swagger2 Web MVC 自动配置
@Profile({"dev", "test"}) // 仅在开发和测试配置文件被激活时应用此配置
public class SwaggerConfig {

    /**
     * 创建 Swagger API 文档的 Docket Bean 实例
     *
     * @return 配置完成的 Docket 实例
     */
    @Bean(value = "defaultApi2")
    public Docket defaultApi2() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo()) // 引用 API 基础信息
                .select()
                // 指定控制器位置
                .apis(RequestHandlerSelectors.basePackage("com.hsu.usercenter.controller")) // 扫描指定包下的接口
                .paths(PathSelectors.any()) // 匹配所有路径
                .build();
    }

    /**
     * 配置 API 基础信息
     *
     * @return API信息对象
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("用户中心项目-接口文档") // API 文档标题
                .description("去更远的地方，见更亮的光") // 描述信息
                .termsOfServiceUrl("https://gitee.com/") // 服务条款的链接
                .contact(new Contact("HsuRosy", "user.hsurosy.icu", "HsuRosy@qq.com")) // 联系方式
                .version("1.0") // 版本号
                .build();
    }
}